//
//  HomeTableViewController.swift
//  sinazd
//
//  Created by apple on 16/3/6.
//  Copyright © 2016年 apple. All rights reserved.
//

import UIKit
import SVProgressHUD

private let homeCellID = "homeCellID"

class HomeTableViewController: BaseTableViewController {
    
    lazy var statuses = [Status]()
    
    let myRefresh = WBRefreshControl()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        // FIXME:老师的代码是 if !serLogin  为什么这个userLogin可以直接用，它不是UserAccount的属性么？因为baseTabviewController 这个父类有这个属性了。之所以价格判断是因为，当用户没有登录的时候，basetableviewcontroller这个父类的view不是tableview  所以使用tableview注册的时候就会崩溃
        if !userLogin{
            //设置访客视图的信息
            visitorLoginView?.setupInfoWith("关注一些人，回这里看看有什么惊喜", imgName: nil)
            
            return
        }
        
        prepareForRegisterCell()
        //TODO:默认就是true
        //tableView.scrollsToTop = true
        
        loadData()
    }
    
    
    //注册cell
    private func prepareForRegisterCell() {
        
        //tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: homeCellID)
        tableView.registerClass(homeStatusCell.self, forCellReuseIdentifier: homeCellID)
        
        tableView.estimatedRowHeight = 300
        
        tableView.rowHeight = UITableViewAutomaticDimension
        
        //设置tableview的分割线不显示
        tableView.separatorStyle = .None
        
        //活动指示器添加到footerView
        tableView.tableFooterView = indicatorView
        
        //添加自定义的下拉刷新
        myRefresh.addTarget(self, action: "loadData", forControlEvents: .ValueChanged)
        tableView.addSubview(myRefresh)
 
        
    }
    
    
    @objc func loadData() {
        
        //indicatorView.startAnimating()
        
        //refreshControl?.beginRefreshing()
        
        var since_id:Int64 = 0
        var max_id:Int64 = 0
        //判断活动指示器是不是在运动，运动说明要加载旧数据
        if indicatorView.isAnimating() {
            
            max_id = self.statuses.last?.id ?? 0

        }else{
            
            since_id = self.statuses.first?.id ?? 0
            
        }
        
        //调用status的方法，在闭包中获取cell的数据
        Status.loadHomeData(since_id,max_id:max_id) { (array) -> () in
            
            self.myRefresh.endRefreshing()
          
            guard let list = array else {
                
                SVProgressHUD.showErrorWithStatus("获取数据失败")
                return
                
            }
            
            if since_id > 0 {
                
                self.statuses = list + self.statuses
                
            }else{
                //若果since_id不大于0，说明，第68行的判断进入了max_id
                self.indicatorView.stopAnimating()
                
                self.statuses = self.statuses + list
                
            }
            
            self.tableView.reloadData()
        }
        
    }
    
    //TODO: 懒加载一个活动指示器，添加给tableViewFooterView
    private lazy var indicatorView:UIActivityIndicatorView = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
    
 
    
    
    
    // MARK: - Table view data source
    override func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 1
    }
    
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return statuses.count
    }
    
    
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(homeCellID, forIndexPath: indexPath) as! homeStatusCell
        
        cell.status = statuses[indexPath.row]
        
        if indexPath.row == statuses.count - 1 && !indicatorView.isAnimating() {
            
            indicatorView.startAnimating()
         
            loadData()
            
        }
        
        
        return cell
    }
    
    
    
}
